
"""
    分页器方法介绍：page_like
        此自定义分页器适用于mysql数据量大时的分页功能
        数据库zbtx_SPMS，返回数据为第1页10条数据，不加指定字段默认查出全部字段

    调用方式 from utils.mff_pager import efficient_pager
    传参方式 efficient_pager(
                    count='count',
                    host='39.102.49.124',
                    port=4006,
                    user='zbtx_prod_code',
                    password='Ect7RAetyvCxozDN',
                    db='zbtx_privacy',
                    charset='utf8',
                    sql="select * from table_name"
                    page = 1,
                    page_size = 100
                    )
    参数说明：
            count：数据总数    (非必须参数)
            host：数据库主机ip   (非必须参数)
            port：数据库端口号   (非必须参数)
            user：数据库用户名   (非必须参数)
            password：数据库密码   (非必须参数)
            db：数据库库名   (非必须参数)
            charset：编码   (非必须参数)
            sql：sql语句
            page：第几页   (非必须参数)
            page_size：每页数据量   (非必须参数)
"""
import pymysql

from utils.connect_mysql import connect_outbound

def efficient_pager(*args,**kwargs):
    host = kwargs.get('host', '')
    port = kwargs.get('port', '')
    user = kwargs.get('user', '')
    password = kwargs.get('password', '')
    db = kwargs.get('db', '')
    charset = kwargs.get('charset', '')
    count = kwargs.get('count', '')
    sql = kwargs.get('sql', '')
    try:
        if not all([host,port,user,password,db,charset]):
            connect = connect_outbound()
        else:
            connect = pymysql.Connect(
                host=host,
                port=port,
                user=user,
                password=password,
                db=db,
                charset=charset
            )
        cursor = connect.cursor(cursor=pymysql.cursors.DictCursor)
    except Exception as f:
        return '数据库连接失败，请检查参数' + str(f)
    try:
        if count:
            sql = sql
            cursor.execute(sql)
            message_count = cursor.fetchall()[0].get('count(id)', '')
            connect.close()
            cursor.close()
            return message_count
        page = kwargs.get('page')
        page_size = kwargs.get('page_size')
        if not page:
            page = 1
        if not page_size:
            page_size = 10
        sql1 = sql + " limit %d,%d"%(int(page) - 1, int(page_size))
        cursor.execute(sql1)
        data_list = cursor.fetchall()
        connect.close()
        cursor.close()
        return data_list
    except Exception as e:
        return '请检查参数或sql语句(%s)' % str(e)

def pager(*args, **kwargs):
    """
    个人自定义分页器，方便适用于数据量不大时的分页器
    传参方式
    调用mff_pager(data=[{"xxx":"xxx"},{"xxx":"xxx"}],page=1,page_size=10)
    传参为不定长参数，data为需要切割的数据，page为第几页，page_size为每页数据量
    """
    if int(kwargs['page']) == 0:
        kwargs['page'] = 1

    if kwargs['page_size'] == '':
        kwargs['page_size'] = 10
    # 计算从什么位置开始切(当前页-1,再*一页的数据个数)
    data_start = (int(kwargs['page']) - 1) * (int(kwargs['page_size']))

    # 计算切到什么位置结束
    data_end = int(kwargs['page']) * int(kwargs['page_size'])
    # 查询 切片操作(已切完的数据)
    goods = kwargs['data'][data_start:data_end]

    return goods
